home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / bbs / WWBBSDoors.lha / WWBBS / rexxDoors / Ship_Hunt.rexx < prev    next >
OS/2 REXX Batch file  |  1995-04-27  |  20KB  |  725 lines

  1. /* Ship_Hunt.rexx version 2.3 by Matt English 1-10-93
  2.    This is an ONLINE game designed for the BBBBS system.
  3.    This game is freely distributable as long as no one makes
  4.    any money from it and the credits remain on the title screen.
  5.    To run on BBBBS, just copy the program "Ship_Hunt.rexx"
  6.    to your RexxDoors directory.
  7.     For bug reports or comments call Matt English (sysop)
  8.                                      Alternative BBS
  9.                                      503-761-3043
  10. */
  11.  
  12. options results
  13. FF='0C'x  /* FormFeed */
  14. CR='0D'x  /* Carraige Return */
  15. CALL TIME('R')
  16. SIGNAL ON BREAK_C
  17. SIGNAL ON BREAK_E
  18.  
  19. bbspath=GETCLIP('BBS_path')
  20. bbspath=bbspath'rexxDoors/Data/'
  21. datapath = bbspath'Ship'
  22.  
  23. PARSE arg Username winnings . colorflag secs .
  24. IF secs='' THEN secs=3600
  25. signal on syntax
  26.  
  27. BBSIDENTIFY EMULATION
  28. PARSE VAR RESULT type .
  29. if type = "ANSI" then
  30.   colorflag=1
  31. else
  32.   colorflag=0
  33.  
  34. BBSIDENTIFY USER
  35. PARSE VAR RESULT Username From Acces .
  36. Name = substr(Username,2,length(Username)-2)
  37.  
  38. letters = 'abcdefghijq'
  39.  
  40. def=''
  41. pen0=''
  42. pen2=''
  43. pen3=''
  44. pen4=''
  45. pen5=''
  46. pen6=''
  47. pen7=''
  48. bak2=''
  49. bak3=''
  50. bak4=''
  51. bak5=''
  52. bak6=''
  53. bak7=''
  54. CLS = 'H'
  55. UNL = ''
  56.  
  57. IF colorflag=1 THEN
  58.   DO
  59.     def=''
  60.     pen0=''
  61.     pen2=''
  62.     pen3=''
  63.     pen4=''
  64.     pen5=''
  65.     pen6=''
  66.     pen7=''
  67.     bak2=''
  68.     bak3=''
  69.     bak4=''
  70.     bak5=''
  71.     bak6=''
  72.     bak7=''
  73.     CLS = 'H'
  74.     UNL = ''
  75.   END
  76.  
  77. PPrompt = '2H'
  78. pmess = '12H'
  79. pmess2 = '12H'
  80. pturn = '64H'
  81. down.1 = '7H'
  82. down.2 = '7H'
  83. down.3 = '57H'
  84. down.4 = '57H'
  85.  
  86. stline = 5
  87. do aa = c2d('A') to c2d('J')
  88.  al = d2c(aa)
  89.  stpos = 28
  90.  stline = stline + 1
  91.  do bb = 1 to 10
  92.   stpos = stpos + 2
  93.   p.al.bb = ''stline';'stpos'H'
  94.   end
  95.  end
  96.  
  97. /* Open the support library if it is not already open. */
  98. if ~show('L',"rexxsupport.library") then do
  99.     addlib('rexxsupport.library',0,-30,0)
  100.      end
  101.  
  102. wz = random(1,999,time('S')) /* initalize random number generator */
  103.  
  104. if ~exists(datapath) then makedir(datapath)
  105. if ~exists(datapath'/winners') then do
  106.  call open(win,datapath'/winners','w')
  107.  top = 90
  108.  do 10
  109.   call writeln(win,''date()'... MATT_ENGLISH..... sank all the ships in 'top' shots!')
  110.   top = top + 1
  111.   end
  112.  call close(win)
  113.  end
  114.  
  115. say cr
  116. say cr
  117. say cr
  118. say'                          'bak7''pen0' Welcome to Ship Hunt ! 'def''cr
  119. say'                          'bak7''pen0'  version 2.3 1-10-93   'def''cr
  120. say'                          'bak7''pen0'    by Matt English     'def''cr
  121. say cr
  122. say cr
  123. call delay(100)
  124. call showwin
  125. say cr
  126. ' Type "I" for instructions or hit return to play > '
  127. input=readstr()
  128. if input ~= 'I' then call start
  129. else call instructions
  130. call start
  131.  
  132. showwin:
  133.  call open(win,datapath'/winners','r')
  134.  say'                   'bak5''pen0'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'def''cr
  135.  say'                   'bak5''pen0'%       Top Ship Hunt Winners!       %'def''cr
  136.  say'                   'bak5''pen0'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%'def''cr
  137.  say cr
  138.  say cr
  139.  do 10
  140.   line = readln(win)
  141.   call sac70''line''
  142.   end
  143.  call close(win)
  144.  say cr
  145.  call delay(200)
  146. return
  147.  
  148. instructions:
  149.  say cr
  150.  say' This is a very simple game. The object is to sink the 5 ships'cr
  151.  say' that the computer has hidden on a 10 x 10 grid. If you can sink'cr
  152.  say' all the ships using less shots than a player on the WINNERS list,'cr
  153.  say' your name will be added to the winners list and you''ll be famous!'cr
  154.  say cr
  155.  say' The computer will generate a new grid for each game played, so you''ll'cr
  156.  say' never play the same game twice and no other player plays the same grid'cr
  157.  say' that you''re playing. The ships are:'cr
  158.  say'                                      Carrier...... 5 spots'cr
  159.  say'                                      Battleship... 4 spots'cr
  160.  say'                                      Destroyer.... 3 spots'cr
  161.  say'                                      Submarine.... 3 spots'cr
  162.  say'                                      PT Boat...... 2 spots'cr
  163.  say cr
  164.  say' If you decide to quit in the middle of a game, your stats will be'cr
  165.  say' saved and you can pick up where you left off next time.'cr
  166.  say cr
  167.  call sac70'HAVE FUN!'
  168.  say cr
  169.  call pressreturn
  170.  return
  171.  
  172. START:
  173. shipsdown = ''
  174. if ~exists(datapath'/'name) then do
  175.  say'Stand by, setting up the game..'
  176.  call setupdata
  177.  end
  178. if justsetup ~= 1 then do
  179.  say cr
  180.  prompt(' Would you like to continue your previous game? (Y,n) > ')
  181.  answer=readstr()
  182.  if answer = 'N' then do
  183.   say' OK,Setting up a new game..'cr
  184.   call setupdata
  185.   end
  186.  else do
  187.   say cr
  188.   say' OK, Loading your previous game...'cr
  189.   say cr
  190.   end
  191.  end
  192. call loaddata
  193. say cr
  194. if justsetup ~= 1 then say' You last played this game on 'pen7''lastplay''def''cr
  195. call delay(100)
  196. say cr
  197. say cr
  198. say cr
  199. call play
  200.  
  201. Play:
  202.  say cls
  203.  say'               'pen5'                   'bak2'Ship Hunt'def''cr
  204.  say cr
  205.  say'                             1 2 3 4 5 6 7 8 9 10'cr
  206.  say'  ' cr
  207.  say'  'bak6''UNL'Ship       Size'def'        A   's.a.1' 's.a.2' 's.a.3' 's.a.4' 's.a.5' 's.a.6' 's.a.7' 's.a.8' 's.a.9' 's.a.10'        'bak4''UNL'Ships Sunk'def''cr
  208.  say'  'bak6'               'def'        B   's.B.1' 's.B.2' 's.B.3' 's.B.4' 's.b.5' 's.b.6' 's.b.7' 's.b.8' 's.b.9' 's.b.10''cr
  209.  say'  'bak6'Carrier      5 'def'        C   's.c.1' 's.c.2' 's.c.3' 's.c.4' 's.c.5' 's.c.6' 's.c.7' 's.c.8' 's.c.9' 's.c.10''cr
  210.  say'  'bak6'Battleship   4 'def'        D   's.d.1' 's.d.2' 's.d.3' 's.d.4' 's.d.5' 's.d.6' 's.d.7' 's.d.8' 's.d.9' 's.d.10''cr
  211.  say'  'bak6'Destroyer    3 'def'        E   's.e.1' 's.e.2' 's.e.3' 's.e.4' 's.e.5' 's.e.6' 's.e.7' 's.e.8' 's.e.9' 's.e.10''cr
  212.  say'  'bak6'Submarine    3 'def'        F   's.f.1' 's.f.2' 's.f.3' 's.f.4' 's.f.5' 's.f.6' 's.f.7' 's.f.8' 's.f.9' 's.f.10''cr
  213.  say'  'bak6'PT Boat      2 'def'        G   's.g.1' 's.g.2' 's.g.3' 's.g.4' 's.g.5' 's.g.6' 's.g.7' 's.g.8' 's.g.9' 's.g.10''cr
  214.  say'                         H   's.h.1' 's.h.2' 's.h.3' 's.h.4' 's.h.5' 's.h.6' 's.h.7' 's.h.8' 's.h.9' 's.h.10''cr
  215.  say'                         I   's.i.1' 's.i.2' 's.i.3' 's.i.4' 's.i.5' 's.i.6' 's.i.7' 's.i.8' 's.i.9' 's.i.10'        'pen3'"Q" = Quit'def''cr
  216.  say'                         J   's.j.1' 's.j.2' 's.j.3' 's.j.4' 's.j.5' 's.j.6' 's.j.7' 's.j.8' 's.j.9' 's.j.10'        Turn #  'cr
  217.  say cr
  218.  say cr
  219.  call clrl2
  220.  call pullshotl
  221.  
  222. clrl:
  223.  arg where
  224.  call writech('STDOUT',''where'                                                              ')
  225.  return
  226.  
  227. clrl2:
  228.  call writech('STDOUT',''pmess''bak3'                                                  'def'')
  229.  call writech('STDOUT',''pmess2''bak3'                                                  'def'')
  230.  return
  231.  
  232. pullshotl:
  233.  if shipsdown ~= '' then do sd = 1 to words(shipsdown)
  234.   say''down.sd''word(shipsdown,sd)''
  235.   end
  236.  turns = turns + 1
  237.  say''pturn''turns''
  238.  prompt(''PPrompt'Enter your shot, Captain 'name' > ')
  239.  theshot=readstr()
  240.  CALL checkBBS()
  241.  call clrl pprompt
  242.  call clrl2
  243.  theshot = strip(theshot)
  244.  if theshot = 'Q' then call quit
  245.  shotl = substr(theshot,1,1)
  246.  shotn = strip(substr(theshot,2,2))
  247.  if length(theshot) > 3 | if theshot = '' |  ~(instring(shotl,letters)) | ~datatype(shotn,'W') | shotn > 10 | shotn < 1 then do
  248.   say''pmess'  'bak3' Please enter your shot in letter/number format'def''cr
  249.   say''pmess2'  'bak3'              Examples: A3 B10 C4              'def''cr
  250.   turns = turns - 1
  251.   call pullshotl
  252.   end
  253.  call checkshot
  254.  
  255. Quit:
  256.  turns = turns - 1
  257.  say cr
  258.  say''pmess''bak3'     OK, Saving your stats for next time....'def''cr
  259.  call delay(50)
  260.  if exists(datapath'/'name) then call delete(datapath'/'name)
  261.  call open(stat,datapath'/'name,'w')
  262.  call writeln(stat,pos.c)
  263.  call writeln(stat,pos.b)
  264.  call writeln(stat,pos.d)
  265.  call writeln(stat,pos.s)
  266.  call writeln(stat,pos.p)
  267.  call writeln(stat,damage.c)
  268.  call writeln(stat,damage.b)
  269.  call writeln(stat,damage.d)
  270.  call writeln(stat,damage.s)
  271.  call writeln(stat,damage.p)
  272.  call writeln(stat,shipssunk)
  273.  call writeln(stat,hits)
  274.  call writeln(stat,misses)
  275.  call writeln(stat,lastplay)
  276.  call writeln(stat,turns)
  277.  call close(stat)
  278.  say cr
  279.  call showwin
  280.  say cr
  281.  say' 'pen2'Returning to the BBS...'def''
  282.  say cr
  283.  call delay(25)
  284.  exit
  285.  
  286.  
  287. checkBBS:
  288. IF ADDRESS()~='BAUD' THEN RETURN 0
  289. IF TIME('E')>secs THEN SIGNAL Quit
  290. dcd
  291. IF RC=0 THEN SIGNAL Quit
  292. temp=secs-TIME('E')
  293. IF temp<120 THEN SAY '*** Only' temp 'seconds left! ***'CR
  294. RETURN 0
  295.  
  296.  
  297. showshot:
  298.    gg = 0
  299.    do 10
  300.     gg = gg + 1
  301.     if gg = 10 then gg = 0
  302.     say''p.shotl.shotn''pen4''gg''def''cr
  303.     say''p.shotl.shotn''pen5'&'def''cr
  304.     say''p.shotl.shotn''pen6'#'def''cr
  305.     end
  306.     say''p.shotl.shotn'-'cr
  307. return
  308.  
  309. checkshot:
  310.  shot = shotl||shotn
  311.  /* Check to see if this is a repeat shot */
  312.  do w = 1 to words(hits)
  313.   if word(hits,w) = shot then do
  314.    say''pmess''bak3'           That spot has already been shot!'def''
  315.    call delay(50)
  316.    turns = turns - 1
  317.    call pullshotl
  318.    end
  319.   end
  320.  do y = 1 to words(misses)
  321.   if word(misses,y) = shot then do
  322.    say''pmess''bak3'           That spot has already been shot!'def''
  323.    call delay(50)
  324.    turns = turns - 1
  325.    call pullshotl
  326.    end
  327.   end
  328. /* Check to see if it's a hit */
  329.  do w = 1 to words(pos.c)
  330.   if word(pos.c,w) = shot then do
  331.    s.shotl.shotn = ''pen3'X'def''
  332.    hits = ''hits'' ''shot''
  333.    damage.c = damage.c + 1
  334.    call showshot
  335.    call delay(25)
  336.    say''p.shotl.shotn''s.shotl.shotn''cr
  337.    say''pmess''bak3'       It''s a HIT!      Good shot captain!'def''
  338.    if damage.c = 5 then do
  339.     call delay(100)
  340.     say''pmess2''bak3'           You just sank the Carrier!!!'def''
  341.     call delay(100)
  342.     shipsdown = shipsdown' Carrier'
  343.     shipssunk = shipssunk + 1
  344.     say cr
  345.     if shipssunk = 5 then call GameOver
  346.     end
  347.    call pullshotl
  348.    end
  349.   end
  350.  do w = 1 to words(pos.b)
  351.   if word(pos.b,w) = shot then do
  352.    s.shotl.shotn = ''pen3'X'def''
  353.    hits = ''hits'' ''shot''
  354.    damage.b = damage.b + 1
  355.    call showshot
  356.    call delay(25)
  357.    say''p.shotl.shotn''s.shotl.shotn''cr
  358.    say''pmess''bak3'        It''s a HIT!      Good shot captain!'def''
  359.    if damage.b = 4 then do
  360.     call delay(100)
  361.     say''pmess2''bak3'         You just sank the Battleship!!!'def''
  362.     call delay(100)
  363.     shipsdown =shipsdown' Battleship'
  364.     shipssunk = shipssunk + 1
  365.     say cr
  366.     if shipssunk = 5 then call GameOver
  367.     end
  368.    call pullshotl
  369.    end
  370.   end
  371.  do w = 1 to words(pos.d)
  372.   if word(pos.d,w) = shot then do
  373.    s.shotl.shotn = ''pen3'X'def''
  374.    hits = ''hits'' ''shot''
  375.    damage.d = damage.d + 1
  376.    call showshot
  377.    call delay(25)
  378.    say''p.shotl.shotn''s.shotl.shotn''cr
  379.    say''pmess''bak3'        It''s a HIT!      Good shot captain!'def''
  380.    if damage.d = 3 then do
  381.     call delay(100)
  382.     say''pmess2''bak3'          You just sank the Destroyer!!!'def''
  383.     call delay(100)
  384.     shipsdown = shipsdown' Destroyer'
  385.     shipssunk = shipssunk + 1
  386.     say cr
  387.     if shipssunk = 5 then call GameOver
  388.     end
  389.    call pullshotl
  390.    end
  391.   end
  392.  do w = 1 to words(pos.s)
  393.   if word(pos.s,w) = shot then do
  394.    s.shotl.shotn = ''pen3'X'def''
  395.    hits = ''hits'' ''shot''
  396.    damage.s = damage.s + 1
  397.    call showshot
  398.    call delay(25)
  399.    say''p.shotl.shotn''s.shotl.shotn''cr
  400.    say''pmess''bak3'        It''s a HIT!      Good shot captain!'def''
  401.    if damage.s = 3 then do
  402.     call delay(100)
  403.     say''pmess2''bak3'           You just sank the Submarine!!!'def''
  404.     call delay(100)
  405.     shipsdown = shipsdown' Submarine'
  406.     shipssunk = shipssunk + 1
  407.     say cr
  408.     if shipssunk = 5 then call GameOver
  409.     end
  410.    call pullshotl
  411.    end
  412.   end
  413.  do w = 1 to words(pos.p)
  414.   if word(pos.p,w) = shot then do
  415.    s.shotl.shotn = ''pen3'X'def''
  416.    hits = ''hits'' ''shot''
  417.    damage.p = damage.p + 1
  418.    call showshot
  419.    call delay(25)
  420.    say''p.shotl.shotn''s.shotl.shotn''cr
  421.    say''pmess''bak3'        It''s a HIT!      Good shot captain!'def''
  422.    if damage.p = 2 then do
  423.     call delay(100)
  424.     say''pmess2''bak3'            You just sank the PT Boat!!!'def''
  425.     call delay(100)
  426.     shipsdown = shipsdown' PT_Boat'
  427.     shipssunk = shipssunk + 1
  428.     say cr
  429.     if shipssunk = 5 then call GameOver
  430.     end
  431.    call pullshotl
  432.    end
  433.   end
  434.  s.shotl.shotn = ''pen2'*'def''
  435.  misses = ''misses'' ''shot''
  436.  call showshot
  437.  call delay(25)
  438.  say''p.shotl.shotn''s.shotl.shotn''cr
  439.  say''pmess''bak3'               That shot was a MISS!!'def''
  440.  say cr
  441.  call delay(30)
  442.  call pullshotl
  443.  
  444. Gameover:
  445.  call sac70'You sank all the ships in 'turns' shots!'
  446.  call delay(50)
  447.  call sac70'Checking your score against the winners list, hold on...'
  448.  say cr
  449.  call checklist
  450.  if madelist = 1 then call sac70'Congratulations, you made the winners list!'
  451.  else call sac70'You didn''t quite make the winners list that time...'
  452.  say cr
  453.  call delete(datapath'/'name)
  454.  prompt('  Would you like to play again? (Y,n) > ')
  455.  again=readstr()
  456.  if again ~= "N" then call start
  457.  else do
  458.   say cr
  459.   call sac70'OK, thanks for playing.... Try again next time..'
  460.   say cr
  461.   call delay(25)
  462.   call showwin
  463.   say cr
  464.   say' 'pen2'Returning to the BBS...'def''cr
  465.   call delay(25)
  466.   exit
  467.  
  468. checklist:
  469.  madelist = 0
  470.  call open(win,datapath'/winners','r')
  471.  winline = ''date()'... 'left(name,17,".")' sank all the ships in 'left(turns,2)' shots!'
  472.  do wl = 1 to 10
  473.   line.wl = readln(win)
  474.   end
  475.  call close(win)
  476.  if turns <= word(line.10,10) then do
  477.   templine.10 = winline
  478.   madelist = 1
  479.   if turns <= word(line.9,10) then do
  480.    templine.9 = winline
  481.    templine.10 = line.9
  482.    end
  483.   else templine.9 = line.9
  484.   if turns <= word(line.8,10) then do
  485.    templine.8 = winline
  486.    templine.9 = line.8
  487.    end
  488.   else templine.8 = line.8
  489.   if turns <= word(line.7,10) then do
  490.    templine.7 = winline
  491.    templine.8 = line.7
  492.    end
  493.   else templine.7 = line.7
  494.   if turns <= word(line.6,10) then do
  495.    templine.6 = winline
  496.    templine.7 = line.6
  497.    end
  498.   else templine.6 = line.6
  499.   if turns <= word(line.5,10) then do
  500.    templine.5 = winline
  501.    templine.6 = line.5
  502.    end
  503.   else templine.5 = line.5
  504.   if turns <= word(line.4,10) then do
  505.    templine.4 = winline
  506.    templine.5 = line.4
  507.    end
  508.   else templine.4 = line.4
  509.   if turns <= word(line.3,10) then do
  510.    templine.3 = winline
  511.    templine.4 = line.3
  512.    end
  513.   else templine.3 = line.3
  514.   if turns <= word(line.2,10) then do
  515.    templine.2 = winline
  516.    templine.3 = line.2
  517.    end
  518.   else templine.2 = line.2
  519.   if turns <= word(line.1,10) then do
  520.    templine.1 = winline
  521.    templine.2 = line.1
  522.    end
  523.   else templine.1 = line.1
  524.   call delete(datapath'/winners')
  525.   call open(win,datapath'/winners','w')
  526.   call writeln(win,templine.1)
  527.   call writeln(win,templine.2)
  528.   call writeln(win,templine.3)
  529.   call writeln(win,templine.4)
  530.   call writeln(win,templine.5)
  531.   call writeln(win,templine.6)
  532.   call writeln(win,templine.7)
  533.   call writeln(win,templine.8)
  534.   call writeln(win,templine.9)
  535.   call writeln(win,templine.10)
  536.   call close(win)
  537.   end
  538. return
  539.  
  540.  
  541. loaddata:
  542.  call open(data,datapath'/'name,'r')
  543.  pos.c = readln(data)
  544.  pos.b = readln(data)
  545.  pos.d = readln(data)
  546.  pos.s = readln(data)
  547.  pos.p = readln(data)
  548.  damage.c = readln(data)
  549.  if damage.c = 5 then shipsdown = shipsdown' Carrier'
  550.  damage.b = readln(data)
  551.  if damage.b = 4 then shipsdown = shipsdown' Battleship'
  552.  damage.d = readln(data)
  553.  if damage.d = 3 then shipsdown = shipsdown' Destroyer'
  554.  damage.s = readln(data)
  555.  if damage.s = 3 then shipsdown = shipsdown' Submarine'
  556.  damage.p = readln(data)
  557.  if damage.p = 2 then shipsdown = shipsdown' PT_Boat'
  558.  shipssunk = readln(data)
  559.  hits = readln(data)
  560.  misses = readln(data)
  561.  lastplay = readln(data)
  562.  turns = readln(data)
  563.  call close(data)
  564.  do z = c2d('A') to c2d('J')
  565.   let = d2c(z)
  566.   call writech(stdout,'.')
  567.   do num = 1 to 10
  568.    call writech(stdout,'.')
  569.    do w = 1 to words(hits)
  570.     if word(hits,w) = let||num then do
  571.      s.let.num = ''pen3'X'def''
  572.      iterate num
  573.      end
  574.     end
  575.    do y = 1 to words(misses)
  576.     if word(misses,y) = let||num then do
  577.      s.let.num = ''pen2'*'def''
  578.      iterate num
  579.      end
  580.     end
  581.    s.let.num = ''pen6'.'def''
  582.    end
  583.   end
  584. return
  585.  
  586. setupdata:
  587.  if exists(datapath'/'name) then call delete(datapath'/'name)
  588.  /* Setup the random locations of the ships */
  589.  pos.c = ''
  590.  pos.b = ''
  591.  pos.d = ''
  592.  pos.s = ''
  593.  pos.p = ''
  594.  call setships C 6 5    /* Carrier */
  595.  call setships B 7 4    /* Battleship */
  596.  call setships D 8 3    /* Destroyer */
  597.  call setships S 8 3    /* Sub */
  598.  call setships P 9 2    /* PT Boat */
  599.  call open(data,datapath'/'name,'w')
  600.  call writeln(data,pos.c)  /* ship positions */
  601.  call writeln(data,pos.b)
  602.  call writeln(data,pos.d)
  603.  call writeln(data,pos.s)
  604.  call writeln(data,pos.p)
  605.  call writeln(data,'0')    /* # of hits on Carrier */
  606.  call writeln(data,'0')    /* # of hits on Battleship */
  607.  call writeln(data,'0')    /* # of hits on Destroyer */
  608.  call writeln(data,'0')    /* # of hits on Sub */
  609.  call writeln(data,'0')    /* # of hits on PT Boat */
  610.  call writeln(data,'0')    /* # of ships sunk so far */
  611.  call writeln(data,'')
  612.  call writeln(data,'')
  613.  call writeln(data,date())
  614.  call writeln(data,'0')
  615.  call close(data)
  616.  justsetup = 1
  617. return
  618.  
  619. setships:
  620.  arg shiptype spotlimit spots
  621.  starta = random(1,20,time('s'))
  622.  if starta > 0 & starta < 11 then direction = 'V'
  623.  else do
  624.   direction = 'H'
  625.   if starta = 11 then starta = 'A'
  626.   if starta = 12 then starta = 'B'
  627.   if starta = 13 then starta = 'C'
  628.   if starta = 14 then starta = 'D'
  629.   if starta = 15 then starta = 'E'
  630.   if starta = 16 then starta = 'F'
  631.   if starta = 17 then starta = 'G'
  632.   if starta = 18 then starta = 'H'
  633.   if starta = 19 then starta = 'I'
  634.   if starta = 20 then starta = 'J'
  635.   end
  636.  startb = random(1,spotlimit,time('s'))
  637.  if direction = 'V' then do
  638.   if startb = 1 then shstring = 'A B C D E F G H I J'
  639.   if startb = 2 then shstring = 'B C D E F G H I J'
  640.   if startb = 3 then shstring = 'C D E F G H I J'
  641.   if startb = 4 then shstring = 'D E F G H I J'
  642.   if startb = 5 then shstring = 'E F G H I J'
  643.   if startb = 6 then shstring = 'F G H I J'
  644.   if startb = 7 then shstring = 'G H I J'
  645.   if startb = 8 then shstring = 'H I J'
  646.   if startb = 9 then shstring = 'I J'
  647.   end
  648.  if direction = 'V' then do
  649.   do r = 1 to spots
  650.    let.r = word(shstring,r)
  651.    end
  652.   if shiptype = 'C' then pos.shiptype = ''let.1''starta' 'let.2''starta' 'let.3''starta' 'let.4''starta' 'let.5''starta''
  653.   if shiptype = 'B' then pos.shiptype = ''let.1''starta' 'let.2''starta' 'let.3''starta' 'let.4''starta''
  654.   if shiptype = 'D' | shiptype = 'S' then pos.shiptype = ''let.1''starta' 'let.2''starta' 'let.3''starta''
  655.   if shiptype = 'P' then pos.shiptype = ''let.1''starta' 'let.2''starta''
  656.   end
  657.  else do
  658.   if shiptype = 'C' then pos.shiptype = ''starta''startb' 'starta''startb + 1' 'starta''startb + 2' 'starta''startb +3' 'starta''startb + 4''
  659.   if shiptype = 'B' then pos.shiptype = ''starta''startb' 'starta''startb + 1' 'starta''startb + 2' 'starta''startb +3''
  660.   if shiptype = 'D' | shiptype = 'S' then pos.shiptype = ''starta''startb' 'starta''startb + 1' 'starta''startb + 2''
  661.   if shiptype = 'P' then pos.shiptype = ''starta''startb' 'starta''startb + 1''
  662.   end
  663.  
  664.  
  665. if shiptype ~= 'C' then do
  666.  do w = 1 to words(pos.shiptype)
  667.   testword = word(pos.shiptype,w)
  668.   do u = 1 to words(used)
  669.    usedword = word(used,u)
  670.    if testword = usedword then call setships shiptype spotlimit spots
  671.    end
  672.   end
  673.  end
  674. used = ''pos.c' 'pos.b' 'pos.d' 'pos.s' 'pos.p''
  675. return
  676.  
  677. readstr: procedure
  678. str=''
  679. out=readch(STDIN)
  680.  call WRITECH(STDOUT,out)
  681.  do while out~=D2C(13)
  682.       if out=D2C(8) then do
  683.          str=SUBSTR(str,1,LENGTH(str)-1)
  684.          call WRITECH(STDOUT,' ')
  685.          call WRITECH(STDOUT,out)
  686.          end
  687.       else
  688.          str=INSERT(str,out)
  689.       out=readch(STDIN)
  690.       call WRITECH(STDOUT,out)
  691.     end
  692. say '0D'x
  693. return(UPPER(str))
  694.  
  695. prompt: procedure
  696. parse arg str
  697. writech(STDOUT,str)
  698. return 1
  699.  
  700. /********************************************************************/
  701.  
  702. instring: procedure
  703. arg letter,string
  704.  if (index(string,letter) == 0) then return 0
  705.   else return 1
  706.  
  707. pressreturn:
  708. prompt(''pen5' Press return to continue'def'')
  709. out=readch(STDIN)
  710. return
  711.  
  712. SAC70:  /* SAY CENTER TEXT*/
  713. PARSE ARG string
  714. SAY CENTER(string,75)||CR
  715. RETURN;
  716.  
  717.  
  718. SYNTAX:
  719.    SAY '*BOOM*  Got a syntax error.  PLEASE notify the sysop.'
  720.    SAY 'Line:' SIGL '   Error Code:' RC
  721.  
  722. BREAK_C:
  723. BREAK_E:
  724. SAY
  725. exit